package com.mueblesgl.proyecto.dao.mysql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;

import com.mueblesgl.proyecto.dao.interfaces.ProcedimientosDAO;
import com.mueblesgl.proyecto.daofactory.MySqlDAOFactory;
import com.mueblesgl.proyecto.entidades.ProcedimientoRecurso;
import com.mueblesgl.proyecto.entidades.Recurso;
import com.mueblesgl.proyecto.entidades.Procedimiento;
import com.mueblesgl.proyecto.util.Constantes;


public class MySqlProcedimientoDAO implements ProcedimientosDAO {

	@Override
	public Vector<Recurso> listarMateriales() {
		Vector<Recurso> materiales = new Vector<Recurso>();
		try {
			Connection con = MySqlDAOFactory.abrirConexion();
			Statement stmt = con.createStatement();
			String query = "SELECT recurso.idrecurso,recurso.costo, recurso.nombre,recurso.cantidad,unidad.idunidad,unidad.nombre,unidad.abreviatura FROM recurso,unidad where recurso.idunidad=unidad.idunidad;";
					
			Recurso recurso = null;
			ResultSet rs = stmt.executeQuery(query);

			while (rs.next()) {
				recurso = new Recurso();
				
				recurso.setIdRecurso(rs.getInt("recurso.idrecurso"));
				recurso.setNombre(rs.getString("recurso.nombre"));
				recurso.setCantidad(rs.getDouble("recurso.cantidad"));
				recurso.setIdUnidad(rs.getInt("unidad.idunidad"));
				recurso.setCosto(rs.getDouble("recurso.costo"));
				recurso.setAbreviatura(rs.getString("unidad.abreviatura"));

				materiales.add(recurso);
			}
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}	
		return materiales;
	}

	@Override
	public int registrarProcedimiento(Vector<Recurso> materiales, String descripcion) {
		
		int filas_afectadas = 0;
		int filas_afectadas2 = 0;
		Procedimiento procedimiento= new Procedimiento();
		
		try {
			
			
			Connection con = MySqlDAOFactory.abrirConexion();
			Statement stmt = con.createStatement();

			String sql = "INSERT INTO PROCEDIMIENTO(descripcion, estado) "
					+ "VALUES ('"
					+ descripcion
					+ "', '"					
					+ Constantes.ESTADO_ACTIVO
					+ "');";
			
			filas_afectadas = stmt.executeUpdate(sql);
			System.out.println(sql);
			String query = "SELECT * FROM PROCEDIMIENTO WHERE descripcion='"+descripcion+ "';";
			
			System.out.println(query);
			
			ResultSet rs = stmt.executeQuery(query);

			while (rs.next()) {
				
				procedimiento.setIdProcedimiento(rs.getInt("idProcedimiento"));
					
			}
			
			for(int i=0;i<materiales.size();i++){
				
				String sql2 = "INSERT INTO PROCEDIMIENTO_RECURSO(idprocedimiento,idrecurso, cantidad, estado) "
						+ "VALUES ("
						+ procedimiento.getIdProcedimiento()
						+", "		
						+ materiales.get(i).getIdRecurso()
						+ ","			
						+ materiales.get(i).getCantidad()
						+ ",'"
						+ Constantes.ESTADO_ACTIVO
						+ "');";
				filas_afectadas2 = stmt.executeUpdate(sql2);
				
				System.out.println(sql2);
				
			}
		
			
			con.close();	
		} catch (Exception e) {
			e.printStackTrace();
		}	

		if (filas_afectadas == 1)
			return procedimiento.getIdProcedimiento();

		return 0;
	}

	@Override
	public boolean actualizarProducto(int idProducto, int idProcedimiento) {
		boolean retorno = false;
		try {
			Connection con = MySqlDAOFactory.abrirConexion();
			Statement stmt = con.createStatement();

			String sql = "UPDATE PRODUCTO "
					+ "SET idProcedimiento = '"
					+ idProcedimiento					
					+"' WHERE idproducto = "+ idProducto +";";
			
			int filas_afectadas = stmt.executeUpdate(sql);
			
			if(filas_afectadas == 1) retorno = true;
			else retorno = false;
			
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return retorno;
	}

	@Override
	public Vector<ProcedimientoRecurso> consultarProcedimientos(int idProcedimiento) {
		Vector<ProcedimientoRecurso> procedimientos = new Vector<ProcedimientoRecurso>();
		
		ProcedimientoRecurso procedimiento = null;
		
		try {
			Connection con = MySqlDAOFactory.abrirConexion();
			Statement stmt = con.createStatement();
			String query = "select * from procedimiento_recurso where idprocedimiento = " + idProcedimiento + ";";
			ResultSet rs = stmt.executeQuery(query);

			if (rs.next()) {
				procedimiento = new ProcedimientoRecurso();
				
				procedimiento.setIdProcedimiento(rs.getInt("idprocedimiento"));
				procedimiento.setIdRecurso(rs.getInt("idrecurso"));
				procedimiento.setCantidad(rs.getInt("cantidad"));
				
				procedimientos.add(procedimiento);
			}
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return procedimientos;
	}

}
